package fachada;

import java.sql.SQLException;
import java.util.Date;
import java.util.Vector;

import basicas.Acabamento;
import basicas.Cor;
import basicas.Endereco;
import basicas.Opcional;
import basicas.PessoaFisica;
import basicas.PessoaFuncionario;
import basicas.PessoaJuridica;
import basicas.Veiculo;
import basicas.Versao;
import colecoes.ColAcabamento;
import colecoes.ColCor;
import colecoes.ColEndereco;
import colecoes.ColOpcional;
import colecoes.ColPessoaFisica;
import colecoes.ColPessoaFuncionario;
import colecoes.ColPessoaJuridica;
import colecoes.ColVeiculo;
import colecoes.ColVersao;
import interfaces.InterfaceAcabamento;
import interfaces.InterfaceCor;
import interfaces.InterfaceEndereco;
import interfaces.InterfaceOpcional;
import interfaces.InterfacePessoaFisica;
import interfaces.InterfacePessoaFuncionario;
import interfaces.InterfacePessoaJuridica;
import interfaces.InterfaceVeiculo;
import interfaces.InterfaceVersao;

public class Fachada {
	//Atributos
	private InterfaceEndereco endereco;
	private InterfacePessoaFisica pessoaFisica;
	private InterfacePessoaFuncionario funcionario;
	private InterfacePessoaJuridica pessoaJuridica;
	private InterfaceAcabamento acabamento;
	private InterfaceCor cor;
	private InterfaceOpcional opcional;
	private InterfaceVeiculo veiculo;
	private InterfaceVersao versao;
	
	//Construtor
	public Fachada(){
		endereco = new ColEndereco();
		pessoaFisica = new ColPessoaFisica();
		funcionario = new ColPessoaFuncionario();
		pessoaJuridica = new ColPessoaJuridica();
		acabamento = new ColAcabamento();
		cor = new ColCor();
		opcional = new ColOpcional();
		veiculo = new ColVeiculo();
		versao = new ColVersao();
	}
	
	//Metodos da colecao Endereco
	public void cadastrarEndereco(Endereco E)
	throws ClassNotFoundException, SQLException {
		endereco.cadastrarEndereco(E);
	}
	
	public Vector listarEndereco()
	throws ClassNotFoundException, SQLException {
		return endereco.listarEndereco();
	}
	
	public Endereco consultarEndereco(int codigo)
	throws ClassNotFoundException, SQLException {
		return endereco.consultarEndereco(codigo);
	}
	
	public void removerEndereco(int codigo)
	throws ClassNotFoundException, SQLException {
		endereco.removerEndereco(codigo);
	}
	
	public void editarEndereco(int codigo, String logradouro, String bairro, String cidade, String estado, String cep)
	throws ClassNotFoundException, SQLException {
		endereco.editarEndereco(codigo, logradouro, bairro, cidade, estado, cep);
	}
	
	public int valorDoEndereco() 
	throws ClassNotFoundException, SQLException {
		return endereco.valorDoEndereco();
	}
	
	
	//Metodos da colecao PessoaFisica
	public void cadastrarPessoaFisica(PessoaFisica F) 
	throws ClassNotFoundException, SQLException {
		pessoaFisica.cadastrarPessoaFisica(F);
	}
	
	public PessoaFisica consultaPessoaFisica(int codigo)
	throws ClassNotFoundException, SQLException {
		return pessoaFisica.consultaPessoaFisica(codigo);
	}
	
	public PessoaFisica consultaFisicaNome(String nome) 
	throws ClassNotFoundException, SQLException {
		return pessoaFisica.consultaFisicaNome(nome);
	}
	
	public Vector consultaFisicaFiltrada(String nome) 
	throws ClassNotFoundException, SQLException {
		return pessoaFisica.consultaFisicaFiltrada(nome);
	}
	
	public Vector listarPessoaFisica()
	throws ClassNotFoundException, SQLException {
		return pessoaFisica.listarPessoaFisica();
	}
	
	public void removerPessoaFisica(int codigo)
	throws ClassNotFoundException, SQLException {
		pessoaFisica.removerPessoaFisica(codigo);
	}
	
	public void editarPessoaFisica(int codigo, String email, String telefone, String telefone2, Date dtNascimento, String sexo, String CPF, String nome, String login, String senha)
	throws ClassNotFoundException, SQLException {
		pessoaFisica.editarPessoaFisica(codigo, email, telefone, telefone2, dtNascimento, sexo, CPF, nome, login, senha);
	}
	
	public void verificaCpfExiste(String CPF)
	throws ClassNotFoundException, SQLException {
		pessoaFisica.verificaCpfExiste(CPF);
	}
	
	public Vector listarPessoaFisicaADM() 
	throws ClassNotFoundException, SQLException {
		return pessoaFisica.listarPessoaFisicaADM();
	}
	
	
	 //Metodos da colecao de Funcionario
	public void cadastrarPessoaFuncionario(PessoaFuncionario F) 
	throws ClassNotFoundException, SQLException{
		funcionario.cadastrarPessoaFuncionario(F);
	}
	
	public PessoaFuncionario consultaPessoaFuncionario(int codigo) 
	throws ClassNotFoundException, SQLException {
		return funcionario.consultaPessoaFuncionario(codigo);
	}
	
	public PessoaFuncionario consultaFuncionarioNome(String nome) 
	throws ClassNotFoundException, SQLException {
		return funcionario.consultaFuncionarioNome(nome);
	}
	
	public Vector consultaFuncionarioFiltrada(String nome) 
	throws ClassNotFoundException, SQLException {
		return funcionario.consultaFuncionarioFiltrada(nome);
	}
	
	public Vector listarPessoaFuncionario() 
	throws ClassNotFoundException, SQLException {
		return funcionario.listarPessoaFuncionario();
	}
	
	public void removerPessoaFuncionario(int codigo) 
	throws ClassNotFoundException, SQLException {
		funcionario.removerPessoaFuncionario(codigo);
	}
	
	public void editarPessoaFuncionario(int codigo, String email, String telefone, String telefone2, int matricula, String nome, String funcao, String login, String Senha) 
	throws ClassNotFoundException, SQLException {
		funcionario.editarPessoaFuncionario(codigo, email, telefone, telefone2, matricula, nome, funcao, login, Senha);
	}
	
	
	//Metodos da colecao de PessoaJuridica
	public void cadastrarPessoaJuridica(PessoaJuridica J) 
	throws ClassNotFoundException, SQLException {
		pessoaJuridica.cadastrarPessoaJuridica(J);
	}
	
	public PessoaJuridica consultaPessoaJuridica(int codigo) 
	throws ClassNotFoundException, SQLException {
		return pessoaJuridica.consultaPessoaJuridica(codigo);
	}
	
	public Vector listarPessoaJuridica() 
	throws ClassNotFoundException, SQLException {
		return pessoaJuridica.listarPessoaJuridica();
	}
	
	public void removerPessoaJuridica(int codigo) 
	throws ClassNotFoundException, SQLException {
		pessoaJuridica.removerPessoaJuridica(codigo);
	}
	
	public void editarPessoaJuridica(int codigo, String email, String telefone, String telefone2, String razaoSocial, String nomeFantasia, String CNPJ, String nomeContrato, String login, String Senha) 
	throws ClassNotFoundException, SQLException {
		pessoaJuridica.editarPessoaJuridica(codigo, email, telefone, telefone2, razaoSocial, nomeFantasia, CNPJ, nomeContrato, login, Senha);
	}
	
	public void verificaCnpjExiste(String CNPJ) 
	throws ClassNotFoundException, SQLException {
		pessoaJuridica.verificaCnpjExiste(CNPJ);
	}
	
	public PessoaJuridica consultaJuridicaNome(String nome) 
	throws ClassNotFoundException, SQLException {
		return pessoaJuridica.consultaJuridicaNome(nome);
	}
	
	public Vector consultaJuridicaFiltrada(String nome) 
	throws ClassNotFoundException, SQLException {
		return pessoaJuridica.consultaJuridicaFiltrada(nome);
	}
	
	
	
	//Metodos da colecao de Acabamento
	public void cadastrarAcabamento(Acabamento A) 
	throws ClassNotFoundException, SQLException {
		acabamento.cadastrarAcabamento(A);
	}
	
	public void removerAcabamento(int codigo) 
	throws ClassNotFoundException, SQLException {
		acabamento.removerAcabamento(codigo);
	}
	
	public Acabamento consultarAcabamento(int codigo) 
	throws ClassNotFoundException, SQLException {
		return acabamento.consultarAcabamento(codigo);
	}
	
	public Vector listarAcabamento() 
	throws ClassNotFoundException, SQLException {
		return acabamento.listarAcabamento();
	}
	

	//Metodos da colecao de Cor
	public void cadastrarCor(Cor C) 
	throws ClassNotFoundException, SQLException {
		cor.cadastrarCor(C);
	}
	
	public void removerCor(int codigo) 
	throws ClassNotFoundException, SQLException {
		cor.removerCor(codigo);
	}
	
	public Cor consultarCor(int codigo) 
	throws ClassNotFoundException, SQLException {
		return cor.consultarCor(codigo);
	}
	
	public Vector listarCor() 
	throws ClassNotFoundException, SQLException {
		return cor.listarCor();
	}
	
	
	//Metodos da colecao Opcional
	public void cadastrarOpcional(Opcional O) 
	throws ClassNotFoundException, SQLException {
		opcional.cadastrarOpcional(O);
	}
	
	public void removerOpcional(int codigo) 
	throws ClassNotFoundException, SQLException {
		opcional.removerOpcional(codigo);
	}
	
	public Opcional ConsultarOpcional(int codigo) 
	throws ClassNotFoundException, SQLException {
		return opcional.ConsultarOpcional(codigo);
	}
	
	public Vector listarOpcional() 
	throws ClassNotFoundException, SQLException {
		return opcional.listarOpcional();
	}
	
	public int valorDaVersao() 
	throws ClassNotFoundException, SQLException {
		return opcional.valorDaVersao();
	}
	
	
	//Metodos da colecao Veiculo
	public void cadastrarVeiculo(Veiculo V) 
	throws ClassNotFoundException, SQLException {
		veiculo.cadastrarVeiculo(V);
	}
	
	public Vector listarVeiculo() 
	throws ClassNotFoundException, SQLException {
		return veiculo.listarVeiculo();
	}
	
	public Veiculo consultarVeiculo(int codigo) 
	throws ClassNotFoundException, SQLException {
		return veiculo.consultarVeiculo(codigo);
	}
	
	public void removerVeiculo(int codigo) 
	throws ClassNotFoundException, SQLException {
		veiculo.removerVeiculo(codigo);
	}
	
	
	//Metodos da colecao Versao
	public void cadastrarVersao(Versao V) 
	throws ClassNotFoundException, SQLException {
		versao.cadastrarVersao(V);
	}
	
	public void removerVersao(int codigo) 
	throws ClassNotFoundException, SQLException {
		versao.removerVersao(codigo);
	}
	
	public Versao consultarVersao(int codigo) 
	throws ClassNotFoundException, SQLException {
		return versao.consultarVersao(codigo);
	}
	
	public Vector listarVersao() 
	throws ClassNotFoundException, SQLException {
		return versao.listarVersao();
	}
	
	public int valorDoVeiculo() 
	throws ClassNotFoundException, SQLException {
		return versao.valorDoVeiculo();
	}
	
}
